package com.example.administrator.myapplication;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
/*
 * 广播分为两种:
 * 普通广播 sendBroadcast
 * 普通的广播的发送是异步的，所有的接收者接收的顺序是不一定的，这一种发送的方式效率高。但是广播接收者不能够对广播进行加工处理，也不能终止广播。
 *
 * 有序广播 sendOrderedBroadcast
 * 有序广播的发送是有顺序的，这个顺序由 android:priority 来决定
 * priority的范围从-1000至1000，优先级越大，就越先收到广播
 *
 * 有序广播的效率相对来说是比较低的，但是有序广播的接收者可以对广播进行加工处理，并且还可以终止广播。
 *
 * 广播注册的方式：
 * 1.静态注册(常驻型注册)  将广播注册在清单文件中  广播是由系统维护，即使你的应用程序没有起动，它也能响应
 * android:exported="false" 可以阻止接收其它应用程序发过来的广播
 *
 * 2.动态注册(非常驻型注册) onResume() 调用registerReceiver，还需要在onPause()方法里面unregisterReceiver解除注册
 *
 *
 */
    private TextView mTvBattery;
    BatteryBroadcastReceiver mBroadcastReceiver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.button1).setOnClickListener(this);
        findViewById(R.id.button2).setOnClickListener(this);
        findViewById(R.id.button3).setOnClickListener(this);
        mTvBattery = (TextView) findViewById(R.id.textView);
    }

    @Override
    protected void onResume() {
        super.onResume();
        //动态注册一个广播
        /*
         * 参一：广播接收者
         * 参二：意图过滤器  此广播接收者要接收的action
         */
        IntentFilter iFilter = new IntentFilter();
        iFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
        mBroadcastReceiver = new BatteryBroadcastReceiver();
        registerReceiver(mBroadcastReceiver, iFilter);
    }

    @Override
    protected void onPause() {
        super.onPause();
        //解除注册
        unregisterReceiver(mBroadcastReceiver);
    }

    //静态注册广播
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.button1:
                Intent intent1 = new Intent("com.broadcast1");
                intent1.putExtra("msg","msg from button1");
                sendBroadcast(intent1);
                break;
            case R.id.button2:
                Intent intent2 = new Intent("com.broadcast1");
                intent2.putExtra("msg","msg from button2");
                sendOrderedBroadcast(intent2,null);
                break;
            case R.id.button3:
                startActivity(new Intent(this,SecendActivity.class));
        }
    }
    //动态注册广播
    class BatteryBroadcastReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            int value = intent.getIntExtra(BatteryManager.EXTRA_LEVEL,0);//当前电量
            int total = intent.getIntExtra(BatteryManager.EXTRA_SCALE,0);//总电量
            //转换为百比
            String percent = value/(float)total*100+"%";
            mTvBattery.setText("当前电量："+percent);
        }
    }
}
